#include "ThreadPool.hpp"
#include "Task.hpp"
#include "Log.hpp"
#include <memory>
#include <functional>
#include <unistd.h>

using namespace log_ns;


// using func_t = int;

int main() {
    // std::unique_ptr<ThreadPool<Task>> tp = std::make_unique<ThreadPool<Task>>();
    ThreadPool<Task>* tp = new ThreadPool<Task>();
    tp->Init();
    tp->Start();
    srand(time(nullptr) ^ getpid());
    int cnt = 5;
    while (true) {
        int x = rand() % 10 + 1, y = rand() % 10 + 1;
        Task t(x, y);
        tp->Push(t);
        LOG(INFO, "Push a task: %s\n", t.debug().c_str());
        sleep(1);
        if (cnt == 0) break;
        cnt--;
    }
    std::cout << "begin to stop" << std::endl;
    tp->Stop();
    sleep(5);

    return 0;
}


// int main() {
//     // Log lg;
//     // lg.Enable(FILE_TYPE);
//     // lg.ClearOurFile();
//     // lg.LoadMessage(__FILE__, __LINE__, DEBUG, "xxxxxx%d, %c\n", 2, 'A');
//     // lg.LoadMessage(__FILE__, __LINE__, INFO, "xxxxxx%d, %s\n", 2, "huwd");
//     // lg.LoadMessage(__FILE__, __LINE__, WARNING, "xxxxxx%d\n", 2);
//     // lg.LoadMessage(__FILE__, __LINE__, FATAL, "xxxxxx%d\n", 2);

//     // EnableToScreen();
//     // EnableToFile();
//     // LOG(DEBUG, "hello %d, xixixi:%s\n", 2, "dquwhd");
//     LOG(FATAL, "xxxxxx\n");

//     return 0;
// }